from tkinter import *
import os
from urllib.request import urlretrieve
from selenium import webdriver
#后端
#搜索歌曲名称，找到对应id
def get_music_name():
    name=entry.get()
    url='https://music.163.com/#/search/m/?s={}&type=1'.format(name)
    option=webdriver.ChromeOptions()
    option.add_argument('--headless')
    drive=webdriver.Chrome(chrome_options=option)#隐藏模式
    drive.get(url)
    drive.switch_to.frame('g_iframe')
    id=drive.find_element_by_xpath('//div[@class="text"]/a').get_attribute('href')
    # print(id)
    song_id=id.split('=')[-1]#分割等号前0和等号后1，-1是等号后
    song_name=drive.find_element_by_xpath('//div[@class="text"]/a/b').get_attribute('title')
    # print(song_name)
    item={}
    item['song_id']=song_id
    item['song_name']=song_name
    drive.quit()
    song_load(item)
#根据id，下载歌曲
def song_load(item):
    song_id=item['song_id']
    song_name=item['song_name']
    song_url='http://music.163.com/song/media/outer/url?id={}.mp3'.format(song_id)
    #创建文件夹
    os.makedirs('音乐',exist_ok=True)
    path='音乐\{}.mp3'.format(song_name)
    #文本框
    text.insert(END,'歌曲:{},正在下载。。。'.format(song_name))

    #文本框滚动
    text.see(END)
    #更新
    text.update()

    #下载保存
    urlretrieve(song_url,path)
    #文本框
    text.insert(END,'歌曲:{},下载完毕。。。'.format(song_name))

    #文本框滚动
    text.see(END)
    #更新
    text.update()


#前端
#创建界面
root=Tk()
#标题
root.title('网易云音乐下载')
#更改大小
root.geometry('500x450')

#标签控件
label=Label(root,text='请输入下载歌曲名称',font=('华文行楷',20))
#定位
label.grid()
#输入框
entry=Entry(root,font=('华文行楷',20))
#定位
entry.grid(row=0,column=1)
#列表框
text=Listbox(root,font=('华文行楷',16),width=50,heigh=15)
text.grid(row=1,columnspan=2)
#开始按钮
button=Button(root,text='开始下载',font=('隶书',15),command=get_music_name)#command
button.grid(row=2,column=0,sticky=W)
# #退出按钮
button1=Button(root,text='退出程序',font=('隶书',15),command=root.quit)#command
button1.grid(row=2,column=1,sticky=E)
#显示界面
root.mainloop()
